/************************************
 * 描述：本文件为程序入口(main)相关内容实现
 * 公司：我们公司
 * 时间：2022-02-22
 ************************************/
#include "actions.hxx"
#include "conditions.hxx"
#include "handlers.hxx"
#include "properties.hxx"
#include "services.hxx"
#include "start.hxx"

/// <summary>
/// 公司：我们公司
/// 作者：李云
/// 时间：2022-01-23
/// 描述：初始化注册，主要用于注册 handler 函数
/// </summary>
/// <param name="decision"></param>
/// <param name="args"></param>
/// <returns>是否成功注册</returns>
int OUR_gs_shell_init_module(int* decision, va_list args) {
    BEGIN;
    *decision = ALL_CUSTOMIZATIONS;
    info_syslog(ROW_SEPARATOR);
    REGISTER_HANDLERS(SITE, decision, args);
    END;
}

/// <summary>
/// 公司：我们公司
/// 作者：李云
/// 时间：2022-01-23
/// 描述：初始化注册，主要用于注册对象的前后处理函数
/// </summary>
/// <param name="decision"></param>
/// <param name="args"></param>
/// <returns>是否成功注册</returns>
int OUR_init_module(int* decision, va_list args) {
    BEGIN;
    *decision = ALL_CUSTOMIZATIONS;
    info_syslog(ROW_SEPARATOR);
    REGISTER_CONDITIONS(SITE, decision, args);
    REGISTER_ACTIONS(SITE, decision, args);
    REGISTER_PROPERTIES(SITE, decision, args);
    END;
}

/// <summary>
/// 公司：我们公司
/// 作者：李云
/// 时间：2022-01-23
/// 描述：初始化注册，主要用于注册服务类函数
/// </summary>
/// <param name="decision"></param>
/// <param name="args"></param>
/// <returns>是否成功注册</returns>
int OURSERVICE_register_methods(int* decision, va_list args) {
    BEGIN;
    *decision = ALL_CUSTOMIZATIONS;
    info_syslog(ROW_SEPARATOR);
    REGISTER_SERVICES(SITE, decision, args);
    END;
}

/// <summary>
/// 公司：我们公司
/// 作者：李云
/// 时间：2022-01-23
/// 描述：注册用的 ITK DLL 入口函数
/// </summary>
/// <param name="SITE">动态库（站点）名称</param>
/// <returns>是否成功注册</returns>
extern "C" DLLAPI VISIBLE int START(SITE) {
    BEGIN;
    show_welcome();
    info_syslog(ROW_SEPARATOR);
    REGISTER_EXIT(SITE, _gs_shell_init_module);
    REGISTER_EXIT(SITE, _init_module);
    REGISTER_EXIT(SITE, SERVICE_register_methods);
    info_syslog("*The library file '%s.dll(.so)' loaded.\n\n", EX_STRING(SITE));
    END;
}
